package cn.niitcxl.services.impl;

import cn.niitcxl.services.OssService;
import cn.niitcxl.utils.ConstPropertiesUtils;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;



import java.io.InputStream;
import java.util.UUID;

@Service
@Slf4j
public class OssServiceImpl implements OssService {

    @Override
    public String uploadAvatar(MultipartFile file) {
        // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
        String endpoint = ConstPropertiesUtils.ENDPOINT;

        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstPropertiesUtils.KEYID;
        String accessKeySecret = ConstPropertiesUtils.KEYSECRET;

        // 填写Bucket名称，例如examplebucket。
        String bucketName = ConstPropertiesUtils.BUCKETNAME;


        //获取文件名称(如果想存在OSS时候 进行自动创建文件夹的话 直接自定即可 例如 2022/3/7/01.jpg) 加上UUID保证文件名称的唯一
        String fileName = file.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("-","");
        //拼接 uuid保证文件唯一
        fileName=uuid+fileName;

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        //根据日期  进行文件上传的分类存储  需要导入日期工具依赖joda-time
        String datePath = new DateTime().toString("yyyy/MM/dd");
        fileName=datePath+"/"+fileName;//2022/3/7/01.jpg

        //拼接url 放回地址到数据库中保存  手动拼接  https://online-teacher-01.oss-cn-beijing.aliyuncs.com/01.jpg
        // https:+(Bucket名称)+.+(地域名称)endpoint+/+文件名称
        String url = "https://" + ConstPropertiesUtils.BUCKETNAME + "." + ConstPropertiesUtils.ENDPOINT + "/" + fileName;
        try {
            //获取文件上传流
            InputStream inputStream = file.getInputStream();
            // 创建PutObject请求。
            ossClient.putObject(bucketName, fileName, inputStream);
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if (ossClient != null) {
                //释放资源
                ossClient.shutdown();
            }
        }
    }

    @Override
    public boolean deleteFile(String filePath) {
        // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
        String endpoint = ConstPropertiesUtils.ENDPOINT;

        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstPropertiesUtils.KEYID;
        String accessKeySecret = ConstPropertiesUtils.KEYSECRET;

        // 填写Bucket名称，例如examplebucket。
        String bucketName = ConstPropertiesUtils.BUCKETNAME;
        int indexOf = filePath.indexOf("/");
        int index = filePath.indexOf("/", indexOf + 2);
        String fileName = filePath.substring(index+1);
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        //执行删除
        try {
            ossClient.deleteObject(bucketName, fileName);
        }catch (Exception e){
         log.error(e.getMessage());
         return false;
        }
        return true;
    }
}